// 增删改查
var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

// 添加
numbers.push(11) // 在末尾添加
numbers.unshift(-1) // 在首位添加
// console.log(numbers);

// 删除
numbers.pop() // 删末位
numbers.shift() // 删首位
// console.log(numbers);

// 从第0位开始，删除两个
numbers.splice(0,2)
// console.log(numbers);

// splice也可以添加内容
// 从1号位开始往后添加abc，0表示删除为0
numbers.splice(1, 0, 'a', 'b', 'c')
// console.log(numbers);

// splice可以修改内容
// 修改就是先删除，后添加
// 先删除0号位的值，再在0号位添加d
numbers.splice(0, 1, 'd')
// console.log(numbers);


// 数组常见方法

// concat 连接2个或更多数组，并返回结果
var arr = ['s', 's', 's']
var str = numbers.concat(arr)
// console.log(str);

// every 对数组中的每一项运行给定回调函数，如果该函数对每一项都返回 true，
// 则返回true, 否则返回false
var every1 = [1, 2, 3, 4, 5, 6, 7]
var flag = every1.every( item => {
    return item < 6
})
// console.log(flag);

// filter 对数组中的每一项运行给定函数，返回该函数会返回 true的项组成的数组
var filter1 = [1, 2, 3, 4, 5]
var filter2 = filter1.filter( item => {
    return item > 3
})
// console.log(filter2);

// forEach	对数组中的每一项运行给定函数。这个方法没有返回值
var for1 = [1, 2, 3, 4, 5]
for1.forEach(item => {
    if (item > 3)
        console.log('大于3');
})


// join	将所有的数组元素连接成一个字符串
var test1 = ['a', 'b', 'c', 'd']
var test2 = test1.join('|')
// console.log(test2);

// indexOf	返回第一个与给定参数相等的数组元素的索引，没有找到则返回-1
var test3 = ['a', 'b', 'c', 'd']
var index = test3.indexOf('c')
// console.log(index);

// lastIndexOf	返回在数组中搜索到的与给定参数相等的元素的索引里最大的值
var test4 = ['a', 'a', 'a', 'a']
var index1 = test4.lastIndexOf('a')
// console.log(index1);

// map	对数组中的每一项运行给定函数，返回每次函数调用的结果组成的数组
// 数组的每个值都乘以2
var test4 = [1, 2, 3, 4, 5]
var test5 = test4.map( item => {
    return item * 2
})
// console.log(test5);


// reverse	颠倒数组中元素的顺序，原先第一个元素现在变成最后一个，同样原先的最后一个元素变成了现在的第一个
var test6 = [1, 2, 3, 4, 5].reverse()
// console.log(test6);

// slice 传入索引值，将数组里对应索引范围内的元素作为新数组返回
// slice() 方法返回一个新的数组对象，这一对象是一个由 begin 和 end 决定的原数组的浅拷贝
// （包括 begin，不包括end）。原始数组不会被改变。
var test7 = [1, 2, 3, 4, 5].slice(0, 3)
// console.log(test7);


// some	对数组中的每一项运行给定函数，如果任一项返回 true，则结果为true, 并且迭代结束
// some和every是相反的
var flag = [1, 2, 3, 4].some( item => {
    return item > 3
})
// console.log(flag);

// 按照字母顺序对数组排序，支持传入指定排序方法的函数作为参数
var test8 = [5, 4, 4, 3, 2, 1].sort()
console.log(test8);

// toString	将数组作为字符串返回
var test9 = [5, 4, 4, 3, 2, 1].toString()
// console.log(test9);


// valueOf方法是一个所有对象都拥有的方法，表示对该对象求值。不同对象的valueOf方法不尽一致，数组的valueOf方法返回数组本身。
var test10 = [5, 4, 4, 3, 2, 1].valueOf()
// console.log(test10);


var sum = [1, 2, 3, 4, 5].reduce( (item1, item2) => {
    return item1 * item2
})
console.log(sum);